package com.qzsoft.zhjd.asphalt.modules.asphalthomepage.mapper;

import cn.hutool.json.JSONObject;
import com.qzsoft.zhjd.asphalt.modules.asphalthomepage.dto.AsphaltDataWeightDTO;
import com.qzsoft.zhjd.asphalt.modules.asphalthomepage.dto.AsphaltMonthAndYearCountDto;
import com.qzsoft.zhjd.asphalt.modules.asphalthomepage.dto.AsphaltMonthCountDto;
import com.qzsoft.zhjd.asphalt.modules.asphalthomepage.dto.GetCostAdjustmentDTO;
import com.qzsoft.zhjd.asphalt.modules.asphalthomepage.dto.OmitDepthOutputAtEachBaseDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Mapper
public interface HomePageMapper {

    /**
     * @Title getYears
     * @Description 获取有数据的年份
     * @return 有数据的年份
     */
    List<String> getYears(@Param("params") Map<String, Object> map);

    /**
     * @Title countByYear
     * @Description 获取养护基地指定年份产量统计
     * @param baseCode 养护基地主键
     * @param year     统计年份
     * @return 产量统计
     */
    BigDecimal countByYear(@Param("baseCode") String baseCode, @Param("year") String year);

    /**
     * @Title countForMonth
     * @Description 养护基地指定年份月产量统计
     * @param baseCode 养护基地编码
     * @param year     统计年份
     * @return 月产量统计
     */
    List<AsphaltMonthCountDto> countForMonth(@Param("baseCode") String baseCode, @Param("year") String year);

    /**
     * 产量统计
     *
     * @param params
     * @return
     */
    OmitDepthOutputAtEachBaseDTO getProduction(@Param("param") Map<String, Object> params);

    /**
     * 获取工时
     *
     * @param params
     * @return
     */
    OmitDepthOutputAtEachBaseDTO getEndOfHours(@Param("param") Map<String, Object> params);

    /**
     * 产量情况
     *
     * @param params
     * @return
     */
    List<JSONObject> getPlantProduction(@Param("param") Map<String, Object> params);

    /**
     * 项目供应情况
     *
     * @param params
     * @return
     */
    List<JSONObject> getEstimatedTimeOfDelivery(@Param("param") Map<String, Object> params);

    /**
     * 实时生产情况
     *
     * @param params
     * @return
     */
    List<AsphaltDataWeightDTO> getRealTimeProduction(@Param("param") Map<String, Object> params);

    /**
     * 材料成本核算
     *
     * @param params
     * @return
     */
    List<GetCostAdjustmentDTO> getCostAdjustment(@Param("param") Map<String, Object> params);

    /**
     * @Title getCountByMonthAndYear
     * @Description 获取指定月份、年度产量
     * @param baseCode 基地编号
     * @param month    月份
     * @param year     年份
     * @return 指定月份、年度产量
     */
    AsphaltMonthAndYearCountDto getCountByMonthAndYear(@Param("baseCode") String baseCode, @Param("month") String month,
                                                       @Param("year") String year);
}
